package Program.LoginUI;

import Program.Tool.CodeUtil;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;

public class LoginUI extends JFrame {
    //顶端容器
    private JPanel northPanel;
    //中间容器
    private JPanel centerPanel;
    //底部容器
    private JPanel southPanel;
    //最小化按钮
    private JButton minimizeButton;
    //关闭按钮
    private JButton closeButton;
    //登录按钮
    private JButton loginButton;
    //忘记密码按钮
    private JButton forgetButton;
    //注册按钮
    private JButton registerButton;
    //账号输入框
    private JTextField userNameField;
    //密码输入框
    private JPasswordField passwordField;
    //用户或者管理员登录选择下拉框
    private JComboBox<String> styleBox;
    //正确验证码显示区
    private JButton rightCode;
    //验证码输入框
    private JTextField codeField;
    //验证码字符串
    private String codeStr;
    //登录界面的监听器
    private LoginListener loginListener;


    public LoginUI() throws HeadlessException{
        //界面初始化
        initJFrame();
        //让界面显示出来，建议写在最后
        this.setVisible(true);
    }

    //主界面
    private void  initJFrame(){
        //设置窗口标题图标
        this.setIconImage(new ImageIcon("JFrame_images\\物业管理.png").getImage());
        //设置窗口没又修饰框
        this.setUndecorated(true);
        //设置窗口的大小
        this.setSize(600,600);
        //设置窗口禁止用户调整
        this.setResizable(false);
        //设置窗口居中
        this.setLocationRelativeTo(null);
        //设置窗口设置边框布局
        this.setLayout(new BorderLayout());
        //设置窗口背景颜色
        this.getContentPane().setBackground(new Color(190,230,240));
        //设置窗口关闭模式
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //添加容器
        this.add(this.initNorth(),BorderLayout.PAGE_START);
        this.add(this.initCenter(),BorderLayout.CENTER);
        this.add(this.initSouth(),BorderLayout.PAGE_END);

        // 实例化自定义监听器
        loginListener=new LoginListener(this, northPanel, minimizeButton,
                closeButton, loginButton,forgetButton,
                registerButton,  userNameField,  passwordField,
                styleBox,  rightCode,  codeField,  codeStr);

        loginButton.addActionListener(loginListener);
        minimizeButton.addActionListener(loginListener);
        closeButton.addActionListener(loginListener);
        registerButton.addActionListener(loginListener);
        forgetButton.addActionListener(loginListener);
        rightCode.addActionListener(loginListener);

        //设置默认按钮按键（按回车点击登录按钮）
        this.getRootPane().setDefaultButton(loginButton);



    }

    //界面顶端部分
    private JPanel initNorth(){
        //顶端容器赋值对象
        northPanel = new JPanel(null);
        //设置容器大小
        northPanel.setPreferredSize(new Dimension(600,315));

        //最小化和关闭按钮赋值对象
        minimizeButton = new JButton();
        closeButton = new JButton();
        //设置按钮格式
        //设置位置
        minimizeButton.setBounds(488,0,54,50);
        closeButton.setBounds(542, 0, 58, 50);
        //设置取消焦点
        minimizeButton.setFocusPainted(false);
        closeButton.setFocusPainted(false);
        //设置取消按钮框
        minimizeButton.setBorderPainted(false);
        closeButton.setBorderPainted(false);
        //设置鼠标样式（手的样式）
        minimizeButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
        closeButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
        //设置按钮背景为透明
        minimizeButton.setContentAreaFilled(false);
        closeButton.setContentAreaFilled(false);
        //设置按钮图标
        minimizeButton.setIcon(new ImageIcon("JFrame_images\\最小化1.png"));  //未选中时
        minimizeButton.setRolloverIcon(new ImageIcon("JFrame_images\\最小化2.png"));  //选中时
        minimizeButton.setPressedIcon(new ImageIcon("JFrame_images\\最小化3.png"));  //按下时
        closeButton.setIcon(new ImageIcon("JFrame_images\\关闭1.png"));  //未选中时
        closeButton.setRolloverIcon(new ImageIcon("JFrame_images\\关闭2.png"));  //选中时
        closeButton.setPressedIcon(new ImageIcon("JFrame_images\\关闭3.png"));   //按下时
        //设置背景
        JLabel bgImgJLabel = new JLabel(new ImageIcon("Login_images\\bg.gif"),JLabel.CENTER);
        bgImgJLabel.setBounds(0,0,600,315);
        //添加控件
        northPanel.add(minimizeButton);
        northPanel.add(closeButton);
        northPanel.add(bgImgJLabel);
        return northPanel;
    }

    //界面中间部分
    private JPanel initCenter(){
        //中间容器赋予对象
        centerPanel = new JPanel(null);
        //设置容器的大小
        centerPanel.setPreferredSize(new Dimension(600,0));
        //设置背景颜色
        centerPanel.setBackground(new Color(190,230,240));
        //设置字体格式
        Font font= new Font("微软雅黑",Font.BOLD,20);

        //账号类型
        //设置账号类型标签
        JLabel styleJLabel = new JLabel("账号类型");
        //下拉框赋予对象
        styleBox = new JComboBox<String>();
        //添加选项
        styleBox.addItem("居民");
        styleBox.addItem("管理员");
        //设置账号类型标签的位置和大小
        styleJLabel.setBounds(170 ,0,130,50);
        //设置下拉框的位置和大小
        styleBox.setBounds(280,10,100,30);
        //设置账号类型标签的字体
        styleJLabel.setFont(font);
        //设置下拉框的的字体
        styleBox.setFont(new Font("微软雅黑",Font.PLAIN,17));
        //添加控件
        centerPanel.add(styleJLabel);
        centerPanel.add(styleBox);

        //设置账号+输入框
        //设置账号图标
        JLabel userNameIcon = new JLabel();
        userNameIcon.setIcon(new ImageIcon("Login_images\\登录图标.png"));
        //设置账号标签
        JLabel userNameJLabel=new JLabel("账  号");
        //输入框赋予对象
        userNameField=new JTextField();
        //设置账号图标的位置和大小
        userNameIcon.setBounds(120,60,32,32);
        //设置账号标签的位置和大小
        userNameJLabel.setBounds(170, 50, 65, 50);
        //设置输入框的位置和大小
        userNameField.setBounds(238, 60, 220, 30);
        //设置字体
        userNameJLabel.setFont(font);
        userNameField.setFont(font);
        //添加控件
        centerPanel.add(userNameIcon);
        centerPanel.add(userNameJLabel);
        centerPanel.add(userNameField);

        //设置密码+密码框
        //设置密码图标
        JLabel passwordIcon = new JLabel();
        passwordIcon.setIcon(new ImageIcon("Login_images\\密码图标.png"));
        //设置密码标签
        JLabel passwordJLabel=new JLabel("密  码");
        //密码框赋予对象
        passwordField=new JPasswordField();
        //设置验证码图标的位置和大小
        passwordIcon.setBounds(120,110,32,32);
        //设置密码标签的位置和大小
        passwordJLabel.setBounds(170,100,65,50);
        //设置密码框的位置和大小
        passwordField.setBounds(238, 110, 220, 30);
        //字体
        passwordJLabel.setFont(font);
        passwordField.setFont(font);
        //添加控件
        centerPanel.add(passwordIcon);
        centerPanel.add(passwordJLabel);
        centerPanel.add(passwordField);

        //设置验证码+输入框
        //设置验证码图标
        JLabel codeIcon = new JLabel();
        codeIcon.setIcon(new ImageIcon("Login_images\\验证码图标.png"));
        //设置验证码标签
        JLabel codeJLabel = new JLabel("验证码");
        //验证码输入框赋予对象
        codeField = new JTextField();
        //获取正确的验证码
        codeStr = CodeUtil.getCode();
        //正确验证码显示区赋予对象
        rightCode = new JButton(codeStr);
        //设置验证码图标的位置和大小
        codeIcon.setBounds(120,160,32,32);
        //设置验证码标签的位置和大小
        codeJLabel.setBounds(170,150,65,50);
        //设置验证码输入框的位置和大小
        codeField.setBounds(238, 160, 100, 30);
        //设置正确验证码显示区的位置和大小
        rightCode.setBounds(358,160,100,28);
        //取消正确验证码显示区透明
        rightCode.setOpaque(true);
        //设置正确验证码显示区背景颜色
        rightCode.setBackground(new Color(255,255,255));
        //设置边框
        rightCode.setBorder(BorderFactory.createLineBorder(Color.black));
        //取消焦点框
        rightCode.setFocusPainted(false);
        //字体
        codeJLabel.setFont(font);
        codeField.setFont(font);
        rightCode.setFont(new Font("sourcecode pro", Font.BOLD, 19));
        //添加控件
        centerPanel.add(codeIcon);
        centerPanel.add(codeJLabel);
        centerPanel.add(codeField);
        centerPanel.add(rightCode);
        return centerPanel;
    }

    //底部容器
    private JPanel initSouth(){
        //底部容器赋予对象
        southPanel = new JPanel(null);
        //设置容器的大小
        southPanel.setPreferredSize(new Dimension(600,75));
        //设置容器的背景颜色
        southPanel.setBackground(new Color(190,230,240));
        //登录按钮赋予对象
        loginButton = new JButton();
        //忘记密码按钮赋予对象
        forgetButton=new JButton();
        //注册按钮赋予对象
        registerButton=new JButton();


        //设置按钮格格式与位置

        //设置登录按钮
        //设置登录按钮的位置和大小
        loginButton.setBounds(238,3,149,64);
        //设置登录按钮的文字提示
        loginButton.setToolTipText("Enter可触发登录");
        //取消焦点框
        loginButton.setFocusPainted(false);
        //取消边框
        loginButton.setBorderPainted(false);
        //设置按钮背景为透明
        loginButton.setContentAreaFilled(false);
        //设置三种情况下的图标
        loginButton.setIcon(new ImageIcon("Login_images\\登录按钮1.png"));
        loginButton.setRolloverIcon(new ImageIcon("Login_images\\登录按钮2.png"));
        loginButton.setPressedIcon(new ImageIcon("Login_images\\登录按钮3.png"));
        //设置鼠标样式（手的样式）
        loginButton.setCursor(new Cursor(Cursor.HAND_CURSOR));
        //添加控件
        southPanel.add(loginButton);

        //设置忘记密码按钮
        //设置忘记密码的位置和大小
        forgetButton.setBounds(5, 12, 64, 64);
        //设置忘记密码按钮的文字提示
        forgetButton.setToolTipText("忘记密码,快捷键Alt+F");
        //取消焦点框
        forgetButton.setFocusPainted(false);
        //取消边框
        forgetButton.setBorderPainted(false);
        //设置按钮背景为透明
        forgetButton.setContentAreaFilled(false);
        //设置三种情况下的图标
        forgetButton.setIcon(new ImageIcon("Login_images\\忘记密码按钮1.png"));
        forgetButton.setRolloverIcon(new ImageIcon("Login_images\\忘记密码按钮2.png"));
        forgetButton.setPressedIcon(new ImageIcon("Login_images\\忘记密码按钮3.png"));
        //添加辅助键
        forgetButton.setMnemonic(KeyEvent.VK_F);
        //添加控件
        southPanel.add(forgetButton);

        //设置注册按钮
        //设置注册的位置和大小
        registerButton.setBounds(535, 8, 64, 64);
        //设置注册按钮的文字提示
        registerButton.setToolTipText("注册账户,快捷键Alt+R");
        //取消焦点框
        registerButton.setFocusPainted(false);
        //取消边框
        registerButton.setBorderPainted(false);
        //设置按钮背景为透明
        registerButton.setContentAreaFilled(false);
        //设置三种情况下的图标
        registerButton.setIcon(new ImageIcon("Login_images\\注册按钮1.png"));
        registerButton.setRolloverIcon(new ImageIcon("Login_images\\注册按钮2.png"));
        registerButton.setPressedIcon(new ImageIcon("Login_images\\注册按钮3.png"));
        //添加辅助键
        registerButton.setMnemonic(KeyEvent.VK_R);
        //添加控件
        southPanel.add(registerButton);

        return southPanel;
    }

}
